package com.bagu.proxy;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/*
* 这是一个增强类(方法里面是增强的逻辑)
* */
@Component
@Aspect/*表示该类是一个切面*/
@Order(1)/*如果我们的类被多个类增强，使用注解@Order写在增强类上，数值越小越先被执行*/
public class userProxy {

    @Pointcut(value = "execution(* com.bagu..dao.*.*(..))")
    public void pointcut(){

    }

    @Before(value="pointcut()")
    public void before(){
        System.out.println("我在方法调用之前执行~");
    }

    @After(value = "pointcut()")
    public void after(){
        System.out.println("我在方法调用之后执行");
    }

    @AfterReturning(value = "pointcut()")
    public void afterReturning(){
        System.out.println("我在方法正常返回之后执行");
    }

    @AfterThrowing(value = "pointcut()")
    public void afterThrowing(){
        System.out.println("我在方法抛出异常之后执行");
    }

    @Around(value = "pointcut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        System.out.println("我是环绕通知，在方法执行之前执行");
        Object proceed = point.proceed();
        System.out.println("我是环绕通知，在方法执行之后执行");
        return proceed;
    }


}